//
// Created by Administrator on 25-8-12.
//

#include "network.h"

#include "delay.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "lwip/dns.h"
#include "lwip/netif.h"
#include "printf_rtos.h"
#include "system_api.h"
#include "event_groups.h"
#include "freertos_demo.h"
extern EventGroupHandle_t g_init_eventgroup;
extern SemaphoreHandle_t g_dns_mutex;
void phy_reset(void)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_RESET);
    delay_ms(1000);
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_SET);
    delay_ms(1000);
}
// 找到由 CubeMX 声明的全局 netif 变量，通常在 lwip.c 中，名为 gnetif
// 你需要在使用它的文件中用 extern 声明一下
extern struct netif gnetif;

/**
  * @brief  一个一次性的网络设置任务
  * 它会等待网络链路正常，然后设置DNS，最后创建真正的应用任务
  */
void network_setup_task(void* argument)
{
    // 1. 等待网络链路连接成功 (我们上次讨论过的，非常重要！)
    // printf("Waiting for network link to be up...\n");
    printf_rtos("Waiting for network link to be up...\n");
    xEventGroupWaitBits(g_init_eventgroup,BIT_NETWORK_READY,pdFALSE,\
        pdTRUE,portMAX_DELAY);

    // 2. 手动设置主 DNS 服务器地址
    ip_addr_t dns_server;
    IP4_ADDR(&dns_server, 223,5,5,5); // 使用宏来创建IP地址
    dns_setserver(0, &dns_server); // 设置为索引为 0 的主 DNS 服务器

    // 你也可以设置备用DNS
    // IP4_ADDR(&dns_server, 8, 8, 8, 8);
    // dns_setserver(1, &dns_server);

    printf_rtos("Primary DNS server has been set to 223.5.5.5\n");
    // printf("Primary DNS server has been set to 223.5.5.5\n");

    printf_rtos("Network setup task finished.\n");
    // printf("Network setup task finished.\n");
    sys_set_eth_status(true);
    xEventGroupSetBits(g_init_eventgroup,BIT_DNS_READY);
    vTaskDelete(NULL);
}